home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
C/C++ Users Group Library 1996 July
/
C-C++ Users Group Library July 1996.iso
/
listings
/
v_13_04
/
pjp
/
fstream
< prev
Wrap
Text File
|
1995-03-02
|
4KB
|
132 lines
------------- Listing 1: The header <fstream> ------------------
// fstream standard header
#ifndef _FSTREAM_
#define _FSTREAM_
#include <istream>
#include <ostream>
// class filebuf
struct _Filet;
class filebuf : public streambuf {
public:
filebuf(_Filet *_F = 0)
{_Init(_F); }
filebuf(ios::_Uninitialized)
: streambuf(ios::_Noinit) {}
virtual ~filebuf();
bool is_open() const
{return ((_File != 0)); }
filebuf *open(const char *, ios::openmode);
filebuf *open(const char *_N, ios::open_mode _M)
{return (open(_N, (ios::openmode)_M)); }
filebuf *close();
protected:
virtual int overflow(int = EOF);
virtual int pbackfail(int = EOF);
virtual int underflow();
virtual int uflow();
virtual streamsize xsgetn(char *, streamsize);
virtual streamsize xsputn(const char *, streamsize);
virtual streampos seekoff(streamoff, ios::seekdir,
ios::openmode = (ios::openmode)(ios::in | ios::out));
virtual streampos seekpos(streampos,
ios::openmode = (ios::openmode)(ios::in | ios::out));
virtual streambuf *setbuf(char *, streamsize);
virtual int sync();
_Filet *_Init(_Filet * = 0, bool = 0);
private:
bool _Closef;
_Filet *_File;
};
// class ifstream
class ifstream : public istream {
public:
ifstream()
: istream(&_Fb) {}
ifstream(const char *_S, openmode _M = in)
: istream(&_Fb) {_Fb.open(_S, _M); }
virtual ~ifstream();
filebuf *rdbuf() const
{return ((filebuf *)&_Fb); }
bool is_open() const
{return (_Fb.is_open()); }
void open(const char *_S, openmode _M = in)
{if (_Fb.open(_S, _M) == 0)
setstate(failbit); }
void open(const char *_S, open_mode _M)
{open(_S, (openmode)_M); }
void close()
{if (_Fb.close() == 0)
setstate(failbit); }
private:
filebuf _Fb;
};
// class ofstream
class ofstream : public ostream {
public:
ofstream()
: ostream(&_Fb) {}
ofstream(const char *_S, openmode _M = out | trunc)
: ostream(&_Fb) {_Fb.open(_S, _M); }
virtual ~ofstream();
filebuf *rdbuf() const
{return ((filebuf *)&_Fb); }
bool is_open() const
{return (_Fb.is_open()); }
void open(const char *_S, openmode _M = out | trunc)
{if (_Fb.open(_S, _M) == 0)
setstate(failbit); }
void open(const char *_S, open_mode _M)
{open(_S, (openmode)_M); }
void close()
{if (_Fb.close() == 0)
setstate(failbit); }
private:
filebuf _Fb;
};
// class stdiobuf
class stdiobuf : public filebuf {
public:
stdiobuf(_Filet *_F)
: filebuf(_F), _Is_buffered(0) {}
virtual ~stdiobuf();
bool buffered() const
{return (_Is_buffered); }
void buffered(bool _F)
{_Is_buffered = _F; }
private:
bool _Is_buffered;
};
// class istdiostream
class istdiostream : public istream {
public:
istdiostream(_Filet *_F)
: istream(&_Fb), _Fb(_F) {}
virtual ~istdiostream();
stdiobuf *rdbuf() const
{return ((stdiobuf *)&_Fb); }
bool buffered() const
{return (_Fb.buffered()); }
void buffered(bool _F)
{_Fb.buffered(_F); }
private:
stdiobuf _Fb;
};
// class ostdiostream
class ostdiostream : public ostream {
public:
ostdiostream(_Filet *_F)
: ostream(&_Fb), _Fb(_F) {}
virtual ~ostdiostream();
stdiobuf *rdbuf() const
{return ((stdiobuf *)&_Fb); }
bool buffered() const
{return (_Fb.buffered()); }
void buffered(bool _F)
{_Fb.buffered(_F); }
private:
stdiobuf _Fb;
};
#endif /* _FSTREAM_ */